Закрыть окно         Список других документов ПЭВМ "Агат"

   '021B' -

.шп0; устанавливает размер экранного окна в полную экранную страницу. Кроме того устанавливаются стандартные векторы ввода/выводы (ячейки ¤10-¤13) и включается текущая текстовая страница. В зависимости от значения старшего бита в ячейке 'CiHfOPMAciOHHyj bufEP

DRN EQU ¤90
TCAT EQU ¤91
SCAT EQU ¤92
SHIFT EQU ¤93
TLIST EQU ¤94
SLIST EQU ¤95
SHLIST EQU ¤96
STATUS EQU ¤97
TSLBUF EQU ¤98
BUFF EQU ¤99
LENGTH EQU ¤9A (9B)
ISCHAN EQU ¤9C
NBLOCK EQU ¤9D (9E)
BYTE EQU ¤9F
EOF EQU ¤A0
NAME EQU ¤A1

;

; ' отладчика. После выхода из подпрограммы в ячейках PC и PC+1 будет находиться адрес следующей команды.

.шп2

'0221' -

.шп0; делает почти тоже самое что и предыдущая с той лишь разницей, что выдает не одну команду, а бесконечный листинг, также как директива 'L' отладчика. Начальный адрес тоже должен находиться в ячейках PC и PC+1.

.шп2

'0224' -

.шп0; выделяет из входной строки числовой параметр. Входной строкой является буфер ввода 'IN' текущую позицию в котором индексирует регистр 'Y', указывающий на очередной символ строки. Подпрограмма считывает все цифры числа (незначащие нули опускаются) вплоть до символа не являющегося цифрой. При выходе из подпрораммы в аккумуляторе будет находиться символ преобразованный из входного следующей подпрограммой:

=========================================
D2D7: 49 B0     433 ПРОВЦИФ  EOR #¤B0
D2D9: C9 0A     434          CMP #¤A
D2DB: 90 07     435          BCC ПРОВЦИФ1
D2DD: 69 88     436          ADC #¤88
D2DF: C9 FA     437          CMP #¤FA
D2E1: B0 01     438          BCS ПРОВЦИФ1
D2E3: 60        439          RTS
D2E4: 29 0F     440 ПРОВЦИФ1 AND #¤F
D2E6: 38        441          SEC
D2E7: 60        442          RTS
=========================================

.сс

Эта подпрограмма проверяет является ли очередной символ строки цифрой. Именно она преобразовывает символы не являющиеся цифрами в некоторые коды, значения которых можно всегда определить воспользовавшись этой подпрограммой.

Подпрограмма выделения числа помещает прочитанное число в ячейки A2, A2+1. Кроме того если ячейка MODE имеет нулевое значение полученное число копируется в ячейки A1, A1+1 и A3, A3+1.

.шп2

'0227' -

.шп0; выводит на устройство значение аккумулятора в виде байта, состоящего из двух шестнадцатиричных цифр.

.шп2

'022A' -

.шп0; выводит на устройство значение аккумулятора в виде одной шестнадцатиричной цифры.

.шп2

'022D' -

.шп0; вводит с клавиатуры один символ, без формирования на экране курсора.

.шп2

'0230' -

.шп0; устанавливает вертикальную позицию курсора. Новая вертикальная позиция помещается в аккум*>>> ByzOB RWTS

CALLRTS CLC -~TEHiE
 DFB BIT2
CALLWTS SEC -zApiCx
CALLRWTS STA TRACK
 STY SECTOR
 LDA BUFT,X
 STA BUFFER
 LDA BUFT+1,X
 STA BUFFER+1
 LDA #0
 ADC #1
 STA ACTION
 JSR RWTS
 BCC RTS0
JMPER1 JMP (ERRVECT) A=ERR

*емой обрабатываются внешние программы расположенные в файле типа 'S'. Структура этого файла проста. В первом секторе распологаются начальные данные программы. Это ¤80 байт (вторая половина сектора не используется), которые после выполнения команды '[BOOT' разместятся в области ¤580-¤5FF. Начиная со второго сектора идет уже сама программа, и эти сектора будут расположены последовательно с адреса ¤D000-¤FFFF в странице псевдо-ПЗУ включаемой командой STA ¤CX21. Максимальный размер программы может быть соответственно 12 Кбайт, если не считать одной оговорки. В старших адресах памяти ¤FFFA-¤FFFF размещены системные векторы процессора, для реакции на различные прерывания. После загрузки эти векторы устнавливаются системой, и при возникновении прерывания (например сброса) сбоя в работе системы не произойдет, она лишь инициализирует некотрые переменные и выйдет в диалог с отладчиком. Но если Ваша программа будет занимать все 12 Кбайт и в конце не будут установлены требуемые адреса реакции на прерывания, может произойти зависание системы. Поэтому в случае максимального размера внешней программы при ее запуске скопируйте значения векторов из страницы псевдо-ПЗУ ¤CX20 в ¤CX21, или установите требуемые адреса непосредственно в своей программе.

.шп3

8.6. Структура загрузочного диска системы.

.шп0

Думается, что некоторым пользователям захочется поглубже закопаться в систему, поэтому чтобы облегчить их труд я привожу информацию о расположении системы на диске и после загрузки в память. На нулевом треке системного диска находится загрузчик, который выдает на экран заставку, и загружает всю систему. Кроме того загрузчик обеспечивает запуск системы, подготавливая все нужные для этого данные, и производит вход в отладчик. Загрузчик считывает информацию сразу со всего трека, т.е. заполняет за один шаг область объемом 4 Кбайт. Это справедливо и для MFM накопителей - у них также задействованы только 16 секторов, а оставшиеся пять на каждом треке системы объявлены во VTOCе свободными и поэтому в них может производиться запись информации. Загружается система в следующем порядке:

.сс

==========================
Трек | Банк  |   Адрес    
-----+-------+------------
  1  | ¤CX20 | ¤D000-¤DFFF
  2  | ¤CX20 | ¤E000-¤EFFF
  3  | ¤CX20 | ¤F000-¤FFFF
  4  | ¤CX60 | ¤D000-¤DFFF
  5  | ¤CX61 | ¤D000-¤DFFF
  6  | ¤CX21 | ¤D000-¤DFFF
  7  | ¤CX21 | ¤E000-¤EFFF
  8  | ¤CX21 | ¤F000-¤FFFF
==========================

Приблизительное расположение модулей системы будет приведено ниже. Точных адресов Вы там не найдете (делать распечатки с каждой версии системы автор не имеет возможности, т.к. это занимает более 200 страниц), но приблизительно оценить что где будет намного легче.

===============================================================
Банк  | Адрес |               Содержимое                       
------+-------+------------------------------------------------
¤CX20 | ¤D000 | Подпрограммы ввода/вывода: Драйвер НГМД ЕС 5088
      |       |          -//-            : Работа с клавиатурой
      |       |          -//-            : Работа с экраном
      |       |          -//-            : Работа с принтером
      |       | Отладчик
      |       | Командный процессор ДОС
      |       | Подпрограммы файловой системы
      |       |
¤CX60 | ¤D000 | Экранный редактор памяти
      |       | Экранный секторный редактор
      |       | Драйвер MFM накопителей
      |       |
¤CX61 | ¤D000 | Подпрограмма вывода сообщений
      |       | Текстовые сообщения системы
      | ¤D800 | Хранится программа копирования дисков
      |       |
¤CX21 | ¤D000 | Внешняя резA #¤26
 STA ¤32
 PLA
 JSR COUT
 INX 
 BNE GET1
GET2 JSR BELL
 JMP GET1
BS CPX #0
 BEQ GET2
 DEX
 LDA #¤26
 STA ¤32
 LDA #<BS1
 LDY #>BS1
 JSR PRINT
 JMP GET1
GET3 CPX #0
 BEQ GETLN
 STA ¤200,X
 RTS

 
UPR ASC "glABHOE B HA{EM dElE - upOPCTBO


"

NEXTS ASC "

O{ibKA! TR="
NEXTU ASC ", pOpPObuEM E}E PAz"

WRPRS ASC "


diCK zAKPyT HA zApiCx

"

ENDS ASC "

BOT My EgO i PAzMETili...

"

NAM ASC "

iMq diCKA>"

BS1 ASC " "

WYN ASC "

ByTA}i CiCTEMHyj diCK"
PRG DFB ¤1
 JSR CLEAN

зываемая битовая карта (BIT MAP) была разбита на 3 части, и размещена в разных местах на диске. Первая часть карты находящаяся непосредственно во VTOCе содержит информацию о первых 50 треках (с 0 по ¤31). Начиная с трека ¤32 информация хранится в отдельном секторе, который распологается по адресу: трек ¤32, сектор 0. В этом секторе распологается информация о 64 очередных треках (с ¤32 по ¤71). Третья часть распологается на треке ¤72, сектор 0 и хранит информацию об оставшейся части секторов (с 72 по ¤9F трек).

Никаких других принципиальных отличий MFM диск не имеет. Между тем хочется заметить, что несмотря на кажущуюся простоту изменений в ДОС, в реальной обстановке могут возникнуть непредвиденные трудности. Автору пришлось немало попыхтеть прежде чем были выловлены все (дай бог!) ошибки и неточности в файловой системе.

.сс

Закрыть окно         Список других документов ПЭВМ "Агат"